/********************************************************************************
 * Project Name		[JavaEE_Web]
 * File Name     	[Tomcat.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package _notes.other;

/**
 * Tomcat服务器配置
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public final class Tomcat {

	public void deployTomcatServer() {
		/**
		 * 部署并启动Tomcat服务器<br/>
		 * 
		 * 1. 解压Tomcat服务器到一个非中文目录下<br/>
		 * 2. 配置环境变量: JAVA_HOME指向JDK安装的根目录<br/>
		 * 3. 通过TomcatHome/bin/startup.bat启动服务器<br/>
		 * 4. 在浏览器中输入localhost:8080来检验是否安装正确<br/>
		 * 5. 若已经启动了一个Tomcat应用, 再启动同一个Tomcat应用, 会抛出异常: java.net.BindException:
		 * Address already in use: JVM_Bind:8080[端口已经被占用了]<br/>
		 * 
		 * 另外可以<br/>
		 * 1. 配置环境变量: CATALINA_HOME指向TomcatHome, 将TomcatHome/bin添加到path,
		 * 在任意目录下都可以使用startup.bat启动和shutdown.bat停止Tomcat<br/>
		 * 2. 可以使用catalina run来启动服务器, 使用catalina stop来停止服务器<br/>
		 */
	}

	public void tomcatDirStructure() {
		/**
		 * Tomcat的目录结构<br/>
		 * 
		 * bin: 存放启动和关闭Tomcat的脚本文件<br/>
		 * conf: 存放Tomcat服务器的各种配置文件<br/>
		 * lib: 存放Tomcat服务器的支撑jar<br/>
		 * logs: 存放Tomcat的日志文件<br/>
		 * temp: 存放Tomcat运行时产生的临时文件<br/>
		 * webapps: Web应用所在目录, 即供外界访问的Web资源的存放目录<br/>
		 * work: Tomcat的工作目录<br/>
		 */
	}

	public void configureTomcatPort() {
		/**
		 * 配置Tomcat端口<br>
		 * TomcatHome/conf/server.xml<br/>
		 * <code>
		 * <Connector 
		 * 		port="8989" 
		 * 		protocol="HTTP/1.1" 
		 *      connectionTimeout="20000" 
		 *     	redirectPort="8443" />
		 * </code>
		 */
	}

	public void configureTomcatAdmin() {
		/**
		 * 配置Tomcat管理员<br/>
		 * TomcatHome/conf/tomcat-users.xml<br/>
		 * 
		 * <code>
		 * <!--Tomcat 7 or above-->
		 * <role rolename="manager-gui"/>
		 * <role rolename="admin-gui"/> 
		 * <user username="tomcat" password="s3cret" roles="manager-gui,admin-gui"/>
		 * </code>
		 * 
		 * <code>
		 * <!--Tomcat 6-->
		 * <role rolename="manager"/> 
		 * <role rolename="admin"/> 
		 * <user username="tomcat" password="s3cret" roles="manager,admin"/>
		 * </code>
		 */
	}

	public void configureVirtualDir() {
		/**
		 * 配置虚拟目录<br/>
		 * 
		 * 1. 在TomcatHome/conf/server.xml中添加[不推荐]<br/>
		 * <code>
		 * <Context 
		 *      docBase="Z:\My_Backup_Cloud\Tools\Tomcat_8\webapps\JavaEE_Web" 
		 *      path="/JavaEE_Web" 
		 *      reloadable="true" 
		 * </code>
		 * 
		 * 2. 在TomcatHome/conf/Catalina/localhost目录下创建配置文件, 文件名为JavaEE_Web.xml
		 * <br/>
		 * <code>
		 * <Context 
		 *      docBase="Z:\My_Backup_Cloud\Tools\Tomcat_8\webapps\JavaEE_Web" 
		 *      path="/JavaEE_Web" 
		 *      reloadable="true" 
		 * </code>
		 * 
		 * docBase: WebApp在磁盘的路径, 可设置相对或绝对路径, 相对路径是相对appBase属性所设的目录而言 <br/>
		 * path: 虚拟路径名称, /可以省略<br/>
		 * reloadable: true: 当修改了WebApp时, Tomcat服务器是否会重新加载Web应用<br/>
		 */
	}

	public void configureVirtualHost() {
		/**
		 * 配置虚拟主机<br/>
		 * 
		 * 1. 在TomcatHome/conf/server.xml中添加新的<Host><br/>
		 * <code>
		 * <Host name="www.sean.org" appBase="webapps"></Host>
		 * </code>
		 * 
		 * 2. 在Windows系统中注册域名[hosts文件中注册域名]<br/>
		 * <code>
		 * 127.0.0.1       www.sean.org
		 * </code>
		 * 
		 * 3. 可以通过www.sean.org/JavaEE_Web/...来访问应用<br/>
		 * 
		 * 4. Tomcat自带了一个名为localhost的主机<br/>
		 */
	}

	public void configureHttpsConnector() {
		/**
		 * 配置Https连接器<br/>
		 * 
		 * 1. 生成Tomcat服务器的数字证书<br/>
		 * <code>
		 * keytool -genkey -alias tomcat -keyalg RSA
		 * 输入密钥库口令tomcat
		 * 输入名字与姓氏localhost
		 * 输入单位组织名称SNS
		 * 输入组织名称SNS
		 * 输入城市名称Wuxi
		 * 输入省名称Jiangsu
		 * 输入国家代码CN
		 * 输入y
		 * 回车
		 * </code> 在用户主目录下会生成一个.keystore的文件<br/>
		 * 
		 * 2. 输入keytool -list -keystore .keystore可以查看密钥库里的所有证书<br/>
		 * 
		 * 3. 配置Https连接器<br/>
		 * 将生成的keystore复制到TomcatHome/conf目录下<br/>
		 * 修改TomcatHome/conf/server.xml<br/>
		 * <code>
		 * <Connector 
		 *     port="8443" 
		 *     protocol="org.apache.coyote.http11.Http11NioProtocol" 
		 *     maxThreads="150" 
		 *     SSLEnabled="true" 
		 *     scheme="https" 
		 *     secure="true" 
		 *     clientAuth="false" 
		 *     sslProtocol="TLS" 
		 *     keystoreFile="conf/.keystore"
		 *     keystorePass="tomcat" />
		 * </code>
		 * 
		 * 4. 登陆https://localhost:8443来访问<br/>
		 */
	}

	public void configureJSPCompileVersion() {
		/**
		 * Tomcat配置JSP编译版本<br/>
		 * 
		 * 默认情况下, Tomcat编译器级别为jdk 1.6[尽管在jdk 1.8下运行]<br/>
		 * 
		 * TomcatHome/conf/web.xml<br/>
		 * <code>
		 * <servlet>
		 *     <servlet-name>jsp</servlet-name>
		 *     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
		 *     <init-param>
		 *         <param-name>fork</param-name>
		 *         <param-value>false</param-value>
		 *     </init-param>
		 *     <init-param>
		 *         <param-name>xpoweredBy</param-name>
		 *         <param-value>false</param-value>
		 *	   </init-param>
		 *     <!-- 指定JSP编译版本 -->
		 *	   <init-param>
		 *	       <param-name>compilerSourceVM</param-name>
		 *	       <param-value>1.8</param-value>
		 *	   </init-param>
		 *	   <init-param>
		 *	       <param-name>compilerTargetVM</param-name>
		 *	       <param-value>1.8</param-value>
		 *	   </init-param>
		 *     <load-on-startup>3</load-on-startup>
		 * </servlet>
		 * </code>
		 */
	}
}
